﻿using Microsoft.Extensions.Configuration;
using Microsoft.IdentityModel.Tokens;
using System;
using System.Collections.Generic;
using System.IdentityModel.Tokens.Jwt;
using System.Linq;
using System.Security.Claims;
using System.Text;
using System.Threading.Tasks;

namespace Arcthitectrue.Common
{
    public  class JwtTools
    {

        public  string JwtNewString(IConfiguration _configuration, string uid,string Name)
        { 
            //2.生成JWT
            //Header，选择签名算法
            var signingAlogorithm=SecurityAlgorithms.HmacSha256;
            //Playload,存放用户信息，下面我们放了一个用户id
            var claims = new[]
            {
                new Claim(JwtRegisteredClaimNames.Sub,uid),
                new Claim(ClaimTypes.Name,Name),
                new Claim(ClaimTypes.Email,"张三@qq.com"),
              
                new Claim(ClaimTypes.DateOfBirth,"张三"),
                new Claim("CustomClaimType","CustomValue"),
                 new Claim("key","value值"),



            };
            //取出私钥并以utf8编码字节输出
            var secretByte = Encoding.UTF8.GetBytes(_configuration["Authentication:SecretKey"]);
            //使用非堆成算法对私钥进行加密
            var signingKey = new SymmetricSecurityKey(secretByte);
            //使用HmacSha来验证加密后的私钥生成数字签名
            var signingCredentials = new SigningCredentials(signingKey, signingAlogorithm);
            //生成Token
            var Token = new JwtSecurityToken(


                    issuer: _configuration["Authentication:Issuer"],   //发布者
                    audience: _configuration["Authentication:Audience"],//接收者
                    claims:claims,//存放用户信息
                    notBefore:DateTime.UtcNow,
                    expires:DateTime.UtcNow.AddDays(1),
                    signingCredentials
                
                
                
                );
            var TokenStr = new JwtSecurityTokenHandler().WriteToken(Token);
            return TokenStr;
        }





    }
}
